package com.qf.contorller;

import com.qf.pojo.User;
import com.qf.service.UserService;
import com.qf.service.UserServletImpl;
import com.qf.util.Constants;
import com.qf.util.StrUtils;
import org.apache.commons.beanutils.BeanUtils;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * @author LiXuekai on 2022/5/23
 */

/**
 * 消费者  控制层
 */
@WebServlet("/user")
public class UserController extends BaseServlet {
    /**
     * 用户注册 校验用户名 是否可用
     * @param request
     * @param response
     * @throws IOException
     */
    public void check(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //1接受用户名参数
        String username = request.getParameter("username");
        //2调用servicel 到数据库查询这个数据是否存在
        //如果存在用户名不可用  如果不存在  证明用户名可以用
        UserService userService = new UserServletImpl();
        boolean check = userService.check(username);
        //3将是否可用的信息返回给页面展示
        if (check) {
            //用户名可用
            response.getWriter().write(Constants.NOT_HAS_USER);
        } else {
            //用户名 不可用
            response.getWriter().write(Constants.HAS_USER);
        }
    }

    /**
     * 消费者登录
     *
     * @param request
     * @param response
     * @return
     */
    public String login(HttpServletRequest request, HttpServletResponse response) {
        //1.获取用户名参数
        String username = request.getParameter("username");
        //2.获取密码参数
        String password = request.getParameter("password");
        //3获取用户验证码参数
        String code = request.getParameter("code");
        //4.获取用户是否要自动登录
        String auto = request.getParameter("auto");
        //5.判断用户名密码 验证码不为空如果为空重定向到登录界面
        if (!StrUtils.empty(username) || !StrUtils.empty(password) || !StrUtils.empty(code)) {
            request.setAttribute("msg", "用户名，密码，验证码不能为空");
            //跳转到登录界面
        //    return "forward:/login.jsp";
        }
        //6.检验验证码是否正确，不正确重定向到的登录界面重新登录
        String sessionCode = (String) request.getSession().getAttribute("code");
        if (!code.equalsIgnoreCase(sessionCode)) {
            request.setAttribute("username", username);
            request.setAttribute("password", password);
            request.setAttribute("msg", "验证码错误！");
            //跳转到登录界面
            return "forward:/login.jsp";
        }
        //7.调用service完成用户名密码校验
        UserService userService = new UserServletImpl();
        User user = userService.longin(username, password);
        //8.判断用户名密码是否正确 如果错误返回提示信息
        if (user == null) {
            request.setAttribute("username", username);
            request.setAttribute("password", password);
            request.setAttribute("code", code);
            //跳转到登录界面
            return "forward:login.jsp";

        }
        //9.登录成功  将用户信息放入tomcat的session会话中携带
        request.getSession().setAttribute("loginUser", user);
        //10判断用户是否要自动登录，进行自动登陆设置
        if ("on".equals(auto)) {
            Cookie cookie = new Cookie(Constants.AUTO_NAME, user.getUsername());
            //设置cookie保存的路径
            cookie.setPath("/");
            //设置cookie的保存时间
            cookie.setMaxAge(60 * 360 * 24 * 14);
            //通过响应将cookie数据写回到浏览器保存
            response.addCookie(cookie);
        }
        //11跳转到首页
        return "redirect:/goods?method=index";

    }
    //新用户注册
    public String register(HttpServletRequest request,HttpServletResponse response)throws Exception{
        //1.获取页面传入的所有参数  key就是input框的页面属性 value就是input中输入的值
        Map<String, String[]> parameterMap = request.getParameterMap();
        //2.将参数封装成User对象
        //创建用户对象
        User user = new User();
        //利用beabUtil 工具类 将map中的数据全部自动set带user对象中
        //使用要求：user对象的属性名必须和页面的input框的name属性一致 实体类必须实现Serializable序列化接口
        BeanUtils.populate(user,parameterMap);
        //3.利用service 将用户对象保存到mysql数据库的用户表中
        UserService userService=new UserServletImpl();
        int count = userService.createUser(user);
        //跳转到注册成功界面
        if(count>0){
            //counter 大于0注册成功
            return  "redirect:/registerSuccess.jsp";

        }else{
            //注册失败
            return "redirect/register.jsp";
        }
    }
}
